/*
   Copyright 2009 Bégaudeau Stéphane

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */

package faneclipse.preferences;

import faneclipse.Activator;
import faneclipse.editors.FanTextAttributeProvider;

import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * This class represents a preference page that
 * is contributed to the Preferences dialog. By 
 * subclassing <samp>FieldEditorPreferencePage</samp>, we
 * can use the field support built into JFace that allows
 * us to create a page that is small and knows how to 
 * save, restore and apply itself.
 * <p>
 * This page is used to modify preferences only. They
 * are stored in the preference store that belongs to
 * the main plug-in class. That way, preferences can
 * be accessed directly via the preference store.
 */
public class FanColorPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
	/**
	 * The colorFieldEditor of the color of default text.
	 */
	private ColorFieldEditor defaultField;
	
	/**
	 * The colorFieldEditor of the color of comments.
	 */
	private ColorFieldEditor commentsField;
	
	/**
	 * The colorFieldEditor of the color of strings.
	 */
	private ColorFieldEditor stringsField;
	
	/**
	 * The colorFieldEditor of the color of keywords.
	 */
	private ColorFieldEditor keywordField;
	
	/**
	 * The constructor.
	 */
	public FanColorPreferencePage() {
		super(GRID);
		setPreferenceStore(Activator.getDefault().getPreferenceStore());
		setDescription("FanEditor Color Preferences:");
	}
	
	/**
	 * Creates the field editors. Field editors are abstractions of
	 * the common GUI blocks needed to manipulate various types
	 * of preferences. Each field editor knows how to save and
	 * restore itself.
	 */
	@Override
	protected final void createFieldEditors() {
		defaultField = new ColorFieldEditor(FanPreferenceConstants.DEFAULT_PREFERENCE, "Default color:", getFieldEditorParent());
		commentsField = new ColorFieldEditor(FanPreferenceConstants.COMMENTS_PREFERENCE, "Comments color:", getFieldEditorParent());
		stringsField = new ColorFieldEditor(FanPreferenceConstants.STRINGS_PREFERENCE, "Strings color:", getFieldEditorParent());
		keywordField = new ColorFieldEditor(FanPreferenceConstants.KEYWORDS_PREFERENCE, "Keyword color:", getFieldEditorParent());
		
		addField(defaultField);
		addField(commentsField);
		addField(stringsField);
		addField(keywordField);
	}
	
	/**
	 * @see org.eclipse.jface.preference.PreferencePage#performApply()
	 */
	@Override
	public final void performApply() {
		super.performApply();
		
		FanTextAttributeProvider.setCommentsColor(this.commentsField.getColorSelector().getColorValue());
		FanTextAttributeProvider.setDefaultColor(this.defaultField.getColorSelector().getColorValue());
		FanTextAttributeProvider.setKeywordsColor(this.keywordField.getColorSelector().getColorValue());
		FanTextAttributeProvider.setStringsColor(this.stringsField.getColorSelector().getColorValue());
	}
	
	/**
	 * @param workbench the workbench.
	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
	 */
	public final void init(final IWorkbench workbench) {
		
	}

}
